package com.atguigu.spzx.common.exception;

import com.atguigu.spzx.model.vo.common.Result;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
//异常处理器：Controller的接口出现异常时，异常处理器可以捕获 执行自己的方法返回视图(json、转发视图、重定向视图)
//RestControllerAdvice: 处理异常后返回结果转为json响应
@RestControllerAdvice
//ControllerAdvice: 处理异常后转发或者重定向
//@ControllerAdvice
@Slf4j
public class SpzxGlobalExceptionHandler {

    @ExceptionHandler(value = Exception.class)
    public Result exception(Exception e){
        if(e!=null){
            //打印异常堆栈日志
            //org.apache.commons.lang3.exception.ExceptionUtils
            log.error("出现异常：{}", ExceptionUtils.getStackTrace(e));
        }
        return Result.error();
    }
    //根据异常给前端提示错误信息时，需要用到code和msg两个值
    //但是系统提供的异常类 只能让他携带msg
    // 可以对异常类进行扩展：让他携带code和msg的值   自定义异常类(两个成员属性  code  msg)
    @ExceptionHandler(value = SpzxException.class)
    public Result exception(SpzxException e){
        if(e.getE()!=null){//获取真实异常信息打印
            //打印异常堆栈日志
            //org.apache.commons.lang3.exception.ExceptionUtils
            log.error("出现异常：{}", ExceptionUtils.getStackTrace(e.getE()));
        }
        return Result.error().code(e.getCode()).message(e.getMessage());
    }


}
